package com.gopay.common.util.validate;

import com.gopay.common.constants.trans.BCFlag;
import org.apache.commons.lang3.StringUtils;

/**
 * description ：对公对私标志 名称校验工具类
 * datetime ：2018/1/30 13:21
 * @author  lx
 */
public class BCFlagValidateUtil {
    /**
     * 对公对私标志 名称规则校验
     * <pre>
     *     传入参数为 对公标志时（bcFlag == 1）:
     *     1.账户名称小于等于3个字的；
           2.账户名称大于3个字小于等于6个字，并且<b>不以</b>以下后缀为结尾的；
            对公账户类型	后缀
            企业	“公司”“集团”
            个体户	“行”“庄”“部”“厂”“店”“库”“坊”“室”“场”
            协会组织	“会”“组织”“处”
            事业单位	“院”“所”“学”“校”“社”“馆”“台”“站”“中心”
          3.账户名称中包含符号“· ”的；
     * </pre>
     *  其中 1.3 认为是 对私 返回false
     *       2. 不包含 关键字 表示对私 返回 false
     * @param bcFlag 对公对私标志 1 表示对公
     * @param name 持卡人姓名/企业名称
     * @return
     *          <pre>
     *          对公标志时 ( false 表示 名称 匹配对私规则 ; true 表示名称 匹配对公规则),
     *          如果传入 对私 标志 直接返回 true
     *
     *          !!!! 只有 结果为 <b>false</b> 时 调用 需要抛出   ProcCodeEnum.PROC_CODE_100E7029
     *          </pre>
     */
    public static final boolean checkBCFlagWithName(String bcFlag,String name){
        // 结果为 false  调用的位置 需要抛出 异常 ProcCodeEnum.PROC_CODE_100E7029, "出款对公对私标志错误"
        boolean result = false;

        if (StringUtils.isBlank(bcFlag) || StringUtils.isBlank(name)) {
            return result;
        }
        //对私 直接 返回 true
        if (!BCFlag.BC_FLAG_C.value.equals(bcFlag)){
            return true;
        }

        name = name.contains("•") ? name.replace("•", "·") : name;

        int nameLen = name.length();

        String[] suffix = {"公司","集团","行","庄","部","厂","店","库","坊","室","场","会","组织","处","院","所","学","校","社","馆","台","站","中心"};
        //对公
        if (BCFlag.BC_FLAG_C.value.equals(bcFlag) && !name.contains("·")) {

            if (nameLen <= 3) {
                return result;
            }

            if (nameLen > 3 && nameLen <= 6) {
                for (int i = 0; i < suffix.length; i++) {
                    //匹配任意后缀 即符合 对公规则
                    if (name.endsWith(suffix[i])) {
                        return true;
                    }
                }
            }

            if(nameLen > 6 ) {
                result = true;
            }
        }

        return result;
    }




    /*
        //测试代码
        public static void main(String[] args) {
        System.out.println(BCFlag.BC_FLAG_C.value.equals("1"));
        String name = "中国人民银行";
        String name1 = "中央电视台";
        String name2 = "中央电视";
        String name3 = "军事博物馆";
        String name4 = "十二女子乐坊";
        String name7 = "马克·吐温";
        String name8 = "清华大学附属中学上地分校";
        String name9 = "胡歌";
        boolean result = checkBCFlagWithName("1", name);
        boolean result1 = checkBCFlagWithName("1", name1);
        boolean result2 = checkBCFlagWithName("1", name2);
        boolean result3 = checkBCFlagWithName("1", name3);
        boolean result4 = checkBCFlagWithName("1", name4);
        boolean result7 = checkBCFlagWithName("1", name7);
        boolean result8 = checkBCFlagWithName("1", name8);
        boolean result9 = checkBCFlagWithName("1", name9);
        System.out.println(name + " result = " + result);
        System.out.println(name1 + " result1 = " + result1);
        System.out.println(name2 + " result2 = " + result2);
        System.out.println(name3 + " result3 = " + result3);
        System.out.println(name4 + " result4 = " + result4);
        System.out.println(name7 + " result7 = " + result7);
        System.out.println(name8 + " result8 = " + result8);
        System.out.println(name9 + " result9 = " + result9);
    }*/
}
